基础强化1:递归算法

递归(recursion):程序调用自身的编程技巧
递归有两个基本要素:
(1) 边界条件:确定递归到何时终止,也称为递归出口。
(2) 递归模式:大问题是如何分解为小问题的,也称为递归体。

例1:
递归实现阶乘,阶乘是最适合用来使用递归的问题之一

Python实现:

def  recursion(n) :
    if n == 1 :
        return 1         #递归结束
    return n * recursion(n - 1)  #问题规模减1,递归调用
print ( recursion(10))

Java实现:

import java.util.Scanner;

public class Recursion {
    public static int Factorial(int n) {
        if (n == 1 || n == 0) {
            return 1;
        }  else
            return n * Factorial(n - 1);
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(Factorial(n));
    }
}

例2:递归实现汉诺塔问题(之前也写过)

def hanoi(n,A,B,C):
    if n==1:
        print(A,'移动到',B)
    else:
        hanoi(n-1,A,C,B)
        print(A,'移动到',B)
        hanoi(n-1,C,B,A)
hanoi(6,'X','Y','Z')

例3:字符串全排列问题

COUNT=0  
def array(n,begin,end):  
    global COUNT  
    if begin>=end:  
        print (n)
        COUNT +=1  
    else:  
        i=begin  
        for num in range(begin,end):  
            n[num],n[i]=n[i],n[num]  
            array(n,begin+1,end)  
            n[num],n[i]=n[i],n[num]  

n=['a','b','c']  
array(n,0,len(n))  
print (COUNT )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值